package main

import "fmt"

/*
 * if-else if-else
 * switch select
 * for range
 * defer
 * 标签 break continue goto
 *
 */

func main() {

	// demo: if
	a := 1
	if a < 20 {
		fmt.Printf("a小于20\n")
	}
	fmt.Printf("a的值是: %d\n", a)

	// demo: if-else if-else
	b := 3
	if b < 1 {
		fmt.Println("b小于1")
	} else if b > 100 {
		fmt.Println("b大于100")
	} else {
		fmt.Println("b在1到100之间")
	}

	// demo: switch
	grade := "d"
	marks := 90
	switch marks {
	case 90:
		grade = "a"
	case 80:
		grade = "b"
	case 70:
		grade = "c"
	default:
		grade = "d"
	}
	fmt.Printf("你的成绩是%s\n", grade)

	switch {
	case grade == "a", grade == "b": // 可并列写多个条件
		fmt.Println("成绩不错")
	case grade == "c":
		fallthrough // 将控制权交给下一个case的处理部分
	case grade == "d":
		fmt.Println("继续努力")
	}

	// 另一种多条件并列写法
	switch grade {
	case "a":
		fmt.Println("a")
	case "b", "c":
		fmt.Println("b,c")
	default:
		fmt.Println("not a,b,c")
	}

	// 带初始化的switch语句
	switch gender := "man"; gender {
	case "woman":
		fmt.Println("woman")
	case "man":
		fmt.Println("man")
	default:
		fmt.Println("what?")
	}

	// demo: select
	// select用于配合通道（channel）的读写操作，用于多个channel的并发读写操作
	aa := make(chan int, 1024)
	bb := make(chan int, 1024)

	for i := 0; i < 10; i++ {
		fmt.Printf("第%d次，", i)
		aa <- 1
		bb <- 1
		select {
		case <-aa:
			fmt.Println("from a")
		case <-bb:
			fmt.Println("from b")
		}

	}

}
